package co.edu.javeriana.monopoly.server.eventos;

import co.edu.javeriana.monopoly.server.modelo.EstadoJugador;
import co.edu.javeriana.monopoly.server.modelo.Evento;
import co.edu.javeriana.monopoly.server.modelo.Jugada;
import co.edu.javeriana.monopoly.server.modelo.Jugador;
import co.edu.javeriana.monopoly.server.modelo.Monopoly;

import co.edu.javeriana.monopoly.server.modelo.MonopolyException;

import co.edu.javeriana.monopoly.server.modelo.Evento;

import java.rmi.RemoteException;

import java.util.Enumeration;

public class InicioJuego extends Evento{
    public InicioJuego(Object[] objects) {
        super(objects);
    }

    public void ejecutar() throws MonopolyException {
        Monopoly m = (Monopoly)getObjects()[0];
        m.setClosed(true);
        for (int i = 0; i < m.getJugadores(); i++)  {
            Jugador j = (Jugador)m.getTablero().getJugadores().get(m.getPosjugadores().get(new Integer(i+1)));
            if (i==0){
                j.setEstado(EstadoJugador.EnTurno);
            }
            else{
                j.setEstado(EstadoJugador.Esperando);
            }
        }
        Enumeration e = m.getTablero().getJugadores().elements();
        while (e.hasMoreElements()){
            Jugador j = (Jugador)e.nextElement();
            Evento r = null;
            if ( j.getEstado() == EstadoJugador.EnTurno ){
                r = new EnTurno(null);
            }
            else{
                r =  new EnEspera(null);
            }
            try {
                Jugada jugada = new Jugada();
                jugada.setJugador(null);
                jugada.setMonopoly(m);
                jugada.setRegla(r);
                m.enviarNotificacion(jugada,j);
            } catch (RemoteException f) {
                f.printStackTrace();
                throw new MonopolyException("Error siguiente regla 'Inicio Juego' ",f);
            }
        }
        
    }

}
